package com.zdy.demo2;

import java.util.Stack;

/**
 * 爬楼梯问题，爬1,2,3阶楼梯，给出爬楼方案
 * @author deyou
 * @version 1.0
 * @date 2021/5/21 15:27
 */

public class countNumber {
    public static int countMethod(int n){
        int sum = 0;
        if(n == 1){
            return 1;
        }else
        if (n == 2 ){
            return 2;
        }else if(n == 3 ){
            return 4;
        }else if(n>=4) {
        return countMethod(n-1)+ countMethod(n-2)+countMethod(n-3);
        }
        return sum;
    }



    //测试
    public static void main(String[] args) {
        for (int i = 0; i < 20; i++) {
            System.out.println("爬楼梯" + i+ " 阶方法数：" + countMethod(i));
        }
    }
}

//计算你出走楼梯的所有方法
class count22{
    /**
     * 一个人爬楼梯，一步可以迈一级，二级，三级台阶，如果楼梯有N级，编写程序，输出所有走法。
     *
     * @param args
     */

    public static void main(String[] args) {
        Stack<Integer> stt = new Stack<Integer>();

        buileT(stt, 5);
    }

    public static void buileT(Stack<Integer> stt, int N) {
        if (N >= 1) {
            stt.push(1);
            buileT(stt, N - 1);
            stt.pop();
        }
        if (N >= 2) {
            stt.push(2);
            buileT(stt, N - 2);
            stt.pop();
        }
        if (N >= 3) {
            stt.push(3);
            buileT(stt, N - 3);
            stt.pop();
        }
        if (N == 0) {
            for (int i : stt) {
                System.out.print("Step:" + i + "-->");
            }
            System.out.println("完成");
        }
    }
}
